
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void clear(void) {
#if defined(_WIN32) || defined(_WIN64)
    system("cls");
#else
    system("clear");
#endif
}

int main(void) {

    while(1) {

        printf("矩阵中是否有小数:\n"
               "1.有(只保留两位小数)\n"
               "2.无\n"
               "0.退出\n");
        int judge;
        scanf("%d",&judge);

        if(judge == 0) {
            printf("\n-----------------------------------------\n\n");
            return 0;
        }

        if(judge == 1) {

            while(getchar() != '\n');
            //矩阵1
            int x,y;
            printf("输入矩阵1的行和列:\n");
            scanf("%d %d",&x,&y);
            double matrix1[x][y];
            while(getchar() != '\n');
            printf("输入矩阵1的元素:\n");
            for(int i = 0; i < x; i++) {
                for(int j = 0; j < y; j++) {
                    scanf("%lf",&matrix1[i][j]);
                }
            }
            while(getchar() != '\n');

            //矩阵2
            int x1,y1;
            printf("\n输入矩阵2的行和列:\n");
            scanf("%d %d",&x1,&y1);
            double matrix2[x1][y1];
            while(getchar() != '\n');
            printf("输入矩阵2的元素:\n");
            for(int i = 0; i < x1; i++) {
                for(int j = 0; j < y1; j++) {
                    scanf("%lf",&matrix2[i][j]);
                }
            }
            while(getchar() != '\n');

            //是否数乘
            printf("是否数乘？\n"
                   "A.是\n"
                   "B.否\n");
            char text;
            scanf("%c",&text);
            if(text == 'A') {

                while(getchar() != '\n');

                //矩阵1倍数
                int multiple1,multiple2;
                printf("输入矩阵1的倍数:\n");
                scanf("%d",&multiple1);

                for(int i = 0; i < x; i++) {
                    for(int j = 0; j < y; j++) {
                        matrix1[i][j] *= multiple1;
                    }
                }
                while(getchar() != '\n');

                //矩阵2倍数
                printf("输入矩阵2的倍数:\n");
                scanf("%d",&multiple2);

                for(int i = 0; i < x1; i++) {
                    for(int j = 0; j < y1; j++) {
                        matrix2[i][j] *= multiple2;
                    }
                }
                while(getchar() != '\n');
            }

printf("\nA.加法\n"
                   "B.减法\n"
                   "C.乘法\n"
                   "输入对应选项选择运算符:");
            char date = '0';
            while(date != 'A' && date != 'a' && date != 'B' && date != 'b' && date != 'C' && date != 'c') {
                while(getchar() != '\n');
                scanf("%c",&date);
                while(getchar() != '\n');
                if(date == 'A' || date == 'a') {//加法运算
                    //条件检查
                    if(x != x1 || y != y1) {
                        printf("矩阵不能相加！\n");
                        break;
                    }
                    double matrix3[x][y];
                    //计算
                    for(int i = 0; i < x; i++) {
                        for(int j = 0; j < y; j++) {
                            matrix3[i][j] = matrix1[i][j] + matrix2[i][j];
                        }
                    }
                    //输出
                    for(int i = 0; i < x; i++) {
                        printf("| ");
                        for(int j = 0; j < y; j++) {
                            printf("%8.2lf ",matrix3[i][j]);
                            if(j == y - 1) {
                                printf("|");
                                printf("\n");
                            }
                        }
                    }
                } else if(date == 'B' || date == 'b') {//减法运算
                    //条件检查
                    if(x != x1 || y != y1) {
                        printf("矩阵不能相减！\n");
                        break;
                    }
                    double matrix3[x][y];
                    //计算
                    for(int i = 0; i < x; i++) {
                        for(int j = 0; j < y; j++) {
                            matrix3[i][j] = matrix1[i][j] - matrix2[i][j];
                        }
                    }
                    //输出
                    for(int i = 0; i < x; i++) {
                        printf("| ");
                        for(int j = 0; j < y; j++) {
                            printf("%8.2lf ",matrix3[i][j]);
                            if(j == y - 1) {
                                printf("|");
                                printf("\n");
                            }
                        }
                    }
                }else if(date == 'C' || date == 'c') {//乘法运算
                    //条件检查
                    if(y != x1) {
                        printf("矩阵不能相乘！\n");
                        break;
                    }
                    double matrix3[x][y1];
                    //计算
                    for(int i = 0; i < x; i++) {
                        for(int j = 0; j < y1; j++) {
                            matrix3[i][j] = 0;
                            for(int k = 0; k < y; k++) {
                                matrix3[i][j] += matrix1[i][k] * matrix2[k][j];
                            }
                        }
                    }
                    //输出
                    for(int i = 0; i < x; i++) {
                        printf("| ");
                        for(int j = 0; j < y1; j++) {
                            printf("%8.2lf ",matrix3[i][j]);
                            if(j == y1 - 1) {
                                printf("|");
                                printf("\n");
                            }
                        }
                    }
                } else printf("无效选择!");
            }

            printf("\n-----------------------------------------\n\n");
        } else if(judge == 2) {

            while(getchar() != '\n');
            //矩阵1
            int x,y;
            printf("输入矩阵1的行和列:\n");
            scanf("%d %d",&x,&y);
            int matrix1[x][y];
            while(getchar() != '\n');
            printf("输入矩阵1的元素:\n");
            for(int i = 0; i < x; i++) {
                for(int j = 0; j < y; j++) {
                    scanf("%d",&matrix1[i][j]);
                }
            }
            while(getchar() != '\n');

            //矩阵2
            int x1,y1;
            printf("\n输入矩阵2的行和列:\n");
            scanf("%d %d",&x1,&y1);
            int matrix2[x1][y1];
            while(getchar() != '\n');
            printf("输入矩阵2的元素:\n");
            for(int i = 0; i < x1; i++) {
                for(int j = 0; j < y1; j++) {
                    scanf("%d",&matrix2[i][j]);
                }
            }
            while(getchar() != '\n');

            //是否数乘
            printf("是否数乘？\n"
                   "A.是\n"
                   "B.否\n");
            char text;
            scanf("%c",&text);
            if(text == 'A') {

                while(getchar() != '\n');

                //矩阵1倍数
                int multiple1,multiple2;
                printf("输入矩阵1的倍数:\n");
                scanf("%d",&multiple1);

                for(int i = 0; i < x; i++) {
                    for(int j = 0; j < y; j++) {
                        matrix1[i][j] *= multiple1;
                    }
                }
                while(getchar() != '\n');

                //矩阵2倍数
                printf("输入矩阵2的倍数:\n");
                scanf("%d",&multiple2);

                for(int i = 0; i < x1; i++) {
                    for(int j = 0; j < y1; j++) {
                        matrix2[i][j] *= multiple2;
                    }
                }
                while(getchar() != '\n');
            }

            //选择运算符
            printf("\nA.加法\n"
                   "B.减法\n"
                   "C.乘法\n"
                   "输入对应选项选择运算符:");
            char date = '0';
            while(date != 'A' && date != 'a' && date != 'B' && date != 'b' && date != 'C' && date != 'c') {
                while(getchar() != '\n');
                scanf("%c",&date);
                while(getchar() != '\n');
                if(date == 'A' || date == 'a') {//加法运算
                    //条件检查
                    if(x != x1 || y != y1) {
                        printf("矩阵不能相加！\n");
                        break;
                    }
                    int matrix3[x][y];
                    //计算
                    for(int i = 0; i < x; i++) {
                        for(int j = 0; j < y; j++) {
                            matrix3[i][j] = matrix1[i][j] + matrix2[i][j];
                        }
                    }
                    //输出
                    for(int i = 0; i < x; i++) {
                        printf("| ");
                        for(int j = 0; j < y; j++) {
                            printf("%d ",matrix3[i][j]);
                            if(j == y - 1) {
                                printf("|");
                                printf("\n");
                            }
                        }
                    }
                }else if(date == 'B' || date == 'b') {//减法运算
                    //条件检查
                    if(x != x1 || y != y1) {
                        printf("矩阵不能相减！\n");
                        break;
                    }
                    int matrix3[x][y];
                    //计算
                    for(int i = 0; i < x; i++) {
                        for(int j = 0; j < y; j++) {
                            matrix3[i][j] = matrix1[i][j] - matrix2[i][j];
                        }
                    }
                    //输出
                    for(int i = 0; i < x; i++) {
                        printf("| ");
                        for(int j = 0; j < y; j++) {
                            printf("%d ",matrix3[i][j]);
                            if(j == y - 1) {
                                printf("|");
                                printf("\n");
                            }
                        }
                    }
                } else if(date == 'C' || date == 'c') {//乘法运算
                    //条件检查
                    if(y != x1) {
                        printf("矩阵不能相乘！\n");
                        break;
                    }
                    int matrix3[x][y1];
                    //计算
                    for(int i = 0; i < x; i++) {
                        for(int j = 0; j < y1; j++) {
                            matrix3[i][j] = 0;
                            for(int k = 0; k < y; k++) {
                                matrix3[i][j] += matrix1[i][k] * matrix2[k][j];
                            }
                        }
                    }
                    //输出
                    for(int i = 0; i < x; i++) {
                        printf("| ");
                        for(int j = 0; j < y1; j++) {
                            printf("%d ",matrix3[i][j]);
                            if(j == y1 - 1) {
                                printf("|");
                                printf("\n");
                            }
                        }
                    }
                } else printf("无效选择!");
            }

            printf("\n-----------------------------------------\n\n");
        } else {
            printf("无效的选择！\n");
            sleep(1);
            clear();
        }

    }
}
```
